<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

  <script>
    /*
      promise是解决异步编程的一种方案，可以理解为一个容器，内部存放了将来要执行的代码
      promise的优点：1.采用链式结构，避免了层层嵌套回调函数 2.提供统一的api接口，使异步操作更加简单方便
      promise的缺点：1.一旦创建就会立即执行，无法中途取消 2.如果不设置回调函数，内部抛出的错误无法反应到外部
      3.当处于pending状态时，无法判断当前进行到了哪个阶段了，到底是刚刚开始，还是已经完成

      状态：pending 进行中  fufiled 已完成  rejected 已拒绝
    */

    const promise1 = new Promise((resolve, reject) => {
      setTimeout(() => {
        // resolve('你好我是promise1')
        reject('不好意思我拒绝')
      }, 3000)
    })
    // promise中传入的这个回调函数，是一个立即执行函数，叫Executor
    const promise = new Promise((resolve, reject) => {
      // 关于resolve传入的值
      // 1.普通值
      // resolve([{name:'123',age:18}])

      // 2. promise对象
      // 如果resolve的值为一个promise对象，那么当前的这个大Promise的状态就由传入的这个promise对象决定
      resolve(promise1)
    })

    promise.then((res) => {
      console.log('成功的回调', res);
    }).catch((err) => {
      console.log("失败的回调", err);
    })

    // promise的.then方法还可以这样写
    // promise.then(res=>{},err=>{})
  </script>

</body>

</html>